package com.lsfb.signln.Statistics.codescan;

import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Handler;
import android.os.Vibrator;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.lsfb.signln.R;
import com.lsfb.signln.Utils.LittleUtils;
import com.zgscwjm.lsfbbasetemplate.LsfbActivity;
import com.zgscwjm.lsfbbasetemplate.annotation.ContentView;
import com.zgscwjm.lsfbbasetemplate.annotation.ViewInject;
import com.zgscwjm.lsfbbasetemplate.utils.LsfbLog;

import java.io.IOException;
import java.util.Vector;

/**
 * Initial the camera
 * 二维码扫描页面
 *
 * @author Ryan.Tang
 */
@ContentView(R.layout.activity_capture)
public class MipcaActivityCapture extends LsfbActivity implements Callback {

    @ViewInject(R.id.aty_my_code_back)
    private ImageView aty_my_code_back;

    private CaptureActivityHandler handler;
    //private ViewfinderView viewfinderView;
    private boolean hasSurface;
    private Vector<BarcodeFormat> decodeFormats;
    private String characterSet;
    private InactivityTimer inactivityTimer;
    private MediaPlayer mediaPlayer;
    private boolean playBeep;
    private static final float BEEP_VOLUME = 0.10f;
    private boolean vibrate;

    private String id;

    private final int RESULT_CODE1 = 101;
//	private LsfbTitleBar titleBar;
//
//	public LsfbTitleBar getTitleBar() {
//		return titleBar;
//	}
//
//	public void setTitleBar(LsfbTitleBar titleBar) {
//		this.titleBar = titleBar;
//	}

    @ViewInject(R.id.viewfinder_view)
    private ViewfinderView viewfinderView;

    @ViewInject(R.id.preview_view)
    private SurfaceView surfaceView;

    @Override
    public void initView() {
//        LittleUtils.setsimpletitlebar(this, "扫码生成PDF");
        CameraManager.init(this.getApplication());
//		viewfinderView = (ViewfinderView) view
//				.findViewById(R.id.viewfinder_view);

        hasSurface = false;
        inactivityTimer = new InactivityTimer(this);
        id = getIntent().getStringExtra("id");

        aty_my_code_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    @Override
    public void initEvent() {

    }

    @Override
    public void initData() {

    }

    private View view;

//	/** Called when the activity is first created. */
//	@Override
//	public View onCreateView(LayoutInflater inflater,
//			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//		// TODO Auto-generated method stub
//		view = inflater.inflate(R.layout.activity_capture, null);
//		CameraManager.init(this.getApplication());
//		viewfinderView = (ViewfinderView) view
//				.findViewById(R.id.viewfinder_view);
//
//		hasSurface = false;
//		inactivityTimer = new InactivityTimer(this);
//		return view;
//	}

    @Override
    public void onResume() {
        super.onResume();
//		SurfaceView surfaceView = (SurfaceView) view
//				.findViewById(R.id.preview_view);
        SurfaceHolder surfaceHolder = surfaceView.getHolder();
        if (hasSurface) {
            initCamera(surfaceHolder);
        } else {
            surfaceHolder.addCallback(this);
            surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
        decodeFormats = null;
        characterSet = null;

        playBeep = true;
        AudioManager audioService = (AudioManager) this
                .getSystemService(this.AUDIO_SERVICE);
        if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
            playBeep = false;
        }
        initBeepSound();
        vibrate = true;

    }

    @Override
    public void onPause() {
        super.onPause();
        if (handler != null) {
            handler.quitSynchronously();
            handler = null;
        }
        CameraManager.get().closeDriver();
    }

    @Override
    public void onDestroy() {
        inactivityTimer.shutdown();
        super.onDestroy();
    }


    /**
     * 处理扫描结果+++++++++++++++++++++++++++++++++++++++++++++++++处理扫描结果
     *
     * @param result
     * @param barcode
     */
    public void handleDecode(Result result, Bitmap barcode) {
        inactivityTimer.onActivity();
        playBeepSoundAndVibrate();
        String resultString = result.getText();
        if (resultString.equals("")) {
            Toast.makeText(this, "扫描失败", Toast.LENGTH_SHORT)
                    .show();
            LsfbLog.e("扫描失败");
        } else {

            try {
                LsfbLog.e("二维码扫描结果" + resultString);
            } catch (Exception e) {
                e.printStackTrace();
                LsfbLog.e("二维码扫描结果出错", e.getMessage());

            }
            LittleUtils.code_resultString=resultString;
        }
        MipcaActivityCapture.this.finish();
    }

//    class downloadPDFThread extends Thread {
//        public void run() {
//            HttpDownloader httpDownloader = new HttpDownloader();
//            int downloadResult = httpDownloader.downloadFiles(
//                    URLString.DOWNLOADPDF + "?usertoken=" + String.valueOf(Config.getUserId()) +
//                            "&startTime=" + start_time + "&endTime=" + end_time + "&number=" + String.valueOf(666666),
//                    "sign", "个人出差统计.pdf");
//            LsfbLog.e("下载结果：" + downloadResult);
//
//            switch (downloadResult) {
//                case -1:        //下载失败
//                    SN.SnackShow(text_date, "下载PDF失败");
//                    break;
//                case 0:
//                case 1:
//                    startActivity(new Intent(MipcaActivityCapture.this, PreviewPdfActivity.class));
//                    break;
//            }
//        }
//    }

    private void initCamera(SurfaceHolder surfaceHolder) {
        try {
            CameraManager.get().openDriver(surfaceHolder);
        } catch (IOException ioe) {
            return;
        } catch (RuntimeException e) {
            return;
        }
        if (handler == null) {
            handler = new CaptureActivityHandler(this, decodeFormats,
                    characterSet);
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height) {

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if (!hasSurface) {
            hasSurface = true;
            initCamera(holder);
        }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        hasSurface = false;

    }

    public ViewfinderView getViewfinderView() {
        return viewfinderView;
    }

    public Handler getHandler() {
        return handler;
    }

    public void drawViewfinder() {
        viewfinderView.drawViewfinder();

    }

    private void initBeepSound() {
        if (playBeep && mediaPlayer == null) {
            // The volume on STREAM_SYSTEM is not adjustable, and users found it
            // too loud,
            // so we now play on the music stream.
            this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setOnCompletionListener(beepListener);

            AssetFileDescriptor file = getResources().openRawResourceFd(
                    R.raw.beep);
            try {
                mediaPlayer.setDataSource(file.getFileDescriptor(),
                        file.getStartOffset(), file.getLength());
                file.close();
                mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
                mediaPlayer.prepare();
            } catch (IOException e) {
                mediaPlayer = null;
            }
        }
    }

    private static final long VIBRATE_DURATION = 200L;

    private void playBeepSoundAndVibrate() {
        if (playBeep && mediaPlayer != null) {
            mediaPlayer.start();
        }
        if (vibrate) {
            Vibrator vibrator = (Vibrator) this.getSystemService(
                    this.VIBRATOR_SERVICE);
            vibrator.vibrate(VIBRATE_DURATION);
        }
    }

    /**
     * When the beep has finished playing, rewind to queue up another one.
     */
    private final OnCompletionListener beepListener = new OnCompletionListener() {
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.seekTo(0);
        }
    };

}